package net.redxyz.open.api;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.zhiqim.kernel.annotation.AnAlias;
import org.zhiqim.kernel.util.consts.Str;

@AnAlias("OpenApiConstants")
public class OpenApiConstants
{
    
    
    /**
     * 订单接口必须字段
     */
    public static String[] trade_fields_base = new String[] {
            // 订单基础
            "tid", "status", "created", "modified", "pay_time", "end_time", "seller_nick", "buyer_nick",
            "seller_rate",
            "buyer_rate",
            
            // 9个基础字段
            "shipping_type", "type", "trade_from", "shipping_type", "snapshot_url", "timeout_action_time", "trade_memo", "sign_time", "consign_time", "invoice_type",
            "invoice_name", "title",
            "seller_flag",
            
            // 金额相关字段
            "total_fee", "adjust_fee", "payment", "point_fee", "post_fee", "seller_cod_fee", "credit_card_fee", "buyer_cod_fee", "express_agency_fee", "buyer_obtain_point_fee",
            "cod_fee", "available_confirm_fee", "received_payment",
            
            // oiad 基础字段
            "include_oaid", "oaid",
            
            // oaid 必须5字段
            "receiver_name", "receiver_mobile", "receiver_phone", "receiver_address",
            
            // 收件其他信息
            "receiver_state", "receiver_city", "receiver_district", "receiver_zip",
            
            // 子订单信息
            "orders.oid", "orders.end_time", "orders.status", "orders.num", "orders.num_iid", "orders.order_from", "orders.pic_path", "orders.title", "orders.payment",
            "orders.total_fee", "orders.adjust_fee" };

    private static Map<String, Str> api_forbidden_Map = new LinkedHashMap<String, Str>();
    static
    {// 系统定义屏蔽的API 列表
        List<Str> ls = new ArrayList<Str>();
        
        // 服务市场
        ls.add(new Str("taobao.vas.order.search", "订单记录导出，用于ISV查询自己名下的应用及收费项目的订单记录（已付款订单）。\r\n建议用于查询前一日的历史记录，不适合用作实时数据查询。\r\n现在只能查询90天以内的数据\r\n该接口限制每分钟所有appkey调用总和只能有800次。"));
        ls.add(new Str("taobao.vas.subsc.search", "订单记录导出，用于ISV查询自己名下的应用及收费项目的订购记录"));
        
        // 聚石塔API
        ls.add(new Str("taobao.rds.db.create", "在rds实例里创建数据库"));
        ls.add(new Str("taobao.rds.db.get", "查询rds下的数据库"));
        ls.add(new Str("taobao.rds.db.delete", "删除rds下的数据库"));
        ls.add(new Str("taobao.jushita.jdp.user.delete", " 删除数据推送用户"));
        ls.add(new Str("taobao.jushita.jdp.user.add", "添加数据推送用户"));
        ls.add(new Str("taobao.jushita.jdp.users.get", "获取开通的订单同步服务的用户。获取开通的订单同步服务的用户，含有rds的路由关系"));
        ls.add(new Str("taobao.rds.db.getdb", "rds获取RDS的DB"));
        ls.add(new Str("taobao.jst.sms.message.send", "聚石塔数据paas短信发送接口，聚石塔短信PAAS场景中，ISV通过该API帮商家发送短信给用户。"));// 需要新增处理器
        ls.add(new Str("taobao.jst.sms.message.direct.batchsend", "聚石塔新短信发送接口，包涵OAID的批量发短信功能。"));// 需要新增处理器
        ls.add(new Str("taobao.jst.sms.oaid.message.send", "基于OAID的短信发送接口."));// 需要新增处理器
        
        // 查询商家是否改地址服务。这两个接口必须关闭。因为可能导致用户流失。
        ls.add(new Str("alibaba.modifyaddress.isv.bindseller.check",
                " 查询服务商下的商家是否开通了改地址。权服务商和商家的绑定关系，看商家是否开通了改地址 1. 没有授权 2. 已与当前appkey签约 3. 没有签约 4. 与其他服务商软件签约，如果是同一个isv name，返回appkey，否则不返回。"));// 需要新增处理器
        ls.add(new Str("taobao.modifyaddress.open", " 查询服务商下的商家是否开通了改地址。权服务商和商家的绑定关系，看商家是否开通了改地址 1. 没有授权 2. 已与当前appkey签约 3. 没有签约 4. 与其他服务商软件签约，如果是同一个isv name，返回appkey，否则不返回。"));
        ls.add(new Str("taobao.modifysku.query.status", "查询商家是否开通自助修改商品信息服务 1. 没有授权 2. 已与当前appkey签约 3. 没有签约 4. 与其他服务商软件签约，如果是同一个isv name，返回appkey，否则不返回。"));
        
        // TMC 消息信息，
        ls.add(new Str("taobao.tmc.messages.consume", "消费多条消息"));// 不允许查询，这里可能存在客户流失，TODO 但是内部可以模拟。后期优化
        ls.add(new Str("taobao.tmc.message.produce", "发布单条消息"));// 发布单条消息，
        ls.add(new Str("taobao.tmc.messages.produce", "批量发送消息"));// 批量发送消息
        // 开通消息关闭，因为这个肯能会影响API,TODO 调用量，但是可以通过后台模拟分配，
        ls.add(new Str("taobao.tmc.user.permit", "为已授权的用户开通消息服务。用户调用该接口可以创建物流订单。目前仅支持手工订单的创建，创建完毕后默认自动使用“自己联系”的方式发货并且初始状态为“已发货”。也可以通过可选参数选择是否发货以及何种方式进行发货。"));// 发布单条消息，
        //ls.add(new Str("taobao.tmc.user.get", "查询指定用户开通的消息通道和组"));// 这个接口没关系，以为需要用户登录
        
        ls.add(new Str("taobao.tmc.groups.get", "获取自定义用户分组列表"));
        ls.add(new Str("taobao.tmc.group.delete", "删除指定的分组或分组下的用户"));
        ls.add(new Str("taobao.tmc.group.add", "为已开通用户添加用户分组"));
        ls.add(new Str("taobao.tmc.messages.confirm", "确认消费消息的状态"));
        ls.add(new Str("taobao.tmc.queue.get", "根据appkey和groupName获取消息队列积压情况"));// 
        
        
        // 订单解密接口
        ls.add(new Str("taobao.top.oaid.decrypt", "订单收件人信息解密"));// 
        
        for (Str str : ls)
            api_forbidden_Map.put(str.value(), str);
    }
    
    /**
     * 获取系统定义禁用的API列表
     * @return
     */
    public static List<Str> getSysForbidApiList()
    {
        List<Str> list = new ArrayList<Str>();
        for (Str str : api_forbidden_Map.values())
            list.add(new Str(str.value(),str.desc()));
        
        return list;
    }
}
